#include "wx/wxprec.h"
#include "wx/xrc/xh_choic.h"

IMPLEMENT_DYNAMIC_CLASS( wxChoiceXmlHandler, wxXmlResourceHandler )

wxChoiceXmlHandler::wxChoiceXmlHandler()
  : wxXmlResourceHandler(), m_insideBox( false ) {
  XRC_ADD_STYLE( wxCB_SORT );
  AddWindowStyles();
}

wxObject *wxChoiceXmlHandler::DoCreateResource() {
  if( m_class == wxT( "wxChoice" ) ) {
    // find the selection
    long selection = GetLong( wxT( "selection" ), -1 );
    // need to build the list of strings from children
    m_insideBox = true;
    CreateChildrenPrivately( NULL, GetParamNode( wxT( "content" ) ) );
    XRC_MAKE_INSTANCE( control, wxChoice )
    control->Create( m_parentAsWindow,
                     GetID(),
                     GetPosition(), GetSize(),
                     strList,
                     GetStyle(),
                     wxDefaultValidator,
                     GetName() );
    if( selection != -1 ) {
      control->SetSelection( selection );
    }
    SetupWindow( control );
    strList.Clear();    // dump the strings
    return control;
  } else {
    wxString str = GetNodeContent( m_node );
    if( m_resource->GetFlags() & wxXRC_USE_LOCALE ) {
      str = wxGetTranslation( str, m_resource->GetDomain() );
    }
    strList.Add( str );
    return NULL;
  }
}

bool wxChoiceXmlHandler::CanHandle( wxXmlNode *node ) {
  return ( IsOfClass( node, wxT( "wxChoice" ) ) ||
           ( m_insideBox && node->GetName() == wxT( "item" ) ) );
}
